{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"../\") # go to parent dir to allow imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ../data/MNIST-data/train-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/train-labels-idx1-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "from models import mnist_model\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import numpy.ma as ma\n",
    "from scipy.stats import bernoulli\n",
    "\n",
    "import matplotlib\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "mnist = input_data.read_data_sets(\"../data/MNIST-data\", one_hot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import imageio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = [str(x) for x in range(10)]\n",
    "\n",
    "def show(img):\n",
    "    \"\"\"Displays single mnist digit\"\"\"\n",
    "    plt.imshow(img.reshape([28, 28]), cmap=\"gray\")\n",
    "    plt.show()\n",
    "    \n",
    "def show_with_var(img, prob, var):\n",
    "    \"\"\"Display single mnist digit next to the variance per class\"\"\"\n",
    "    fig, axs = plt.subplots(1, 3, figsize=(10,5))\n",
    "    axs[0].imshow(img.reshape([28, 28]))\n",
    "    axs[1].bar(labels, prob)\n",
    "    axs[2].bar(labels, var)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training Dropout model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ../data/MNIST-data/train-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/train-labels-idx1-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-labels-idx1-ubyte.gz\n",
      "Epoch 0\n",
      "Accuracy: 0.179999992251\n",
      "Epoch 2000\n",
      "Accuracy: 1.0\n",
      "Epoch 4000\n",
      "Accuracy: 0.959999978542\n",
      "Epoch 6000\n",
      "Accuracy: 1.0\n",
      "Epoch 8000\n",
      "Accuracy: 1.0\n",
      "Epoch 10000\n",
      "Accuracy: 0.960000038147\n",
      "Epoch 12000\n",
      "Accuracy: 0.980000019073\n",
      "Epoch 14000\n",
      "Accuracy: 1.0\n",
      "Epoch 16000\n",
      "Accuracy: 1.0\n",
      "Epoch 18000\n",
      "Accuracy: 1.0\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "n_passes=50\n",
    "dropout_rate=0.3\n",
    "learning_rate=1e-4\n",
    "epochs=20000\n",
    "display_step=2000\n",
    "\n",
    "mnist = input_data.read_data_sets(\"../data/MNIST-data\", one_hot=True)\n",
    "\n",
    "x_data = tf.placeholder(tf.float32, shape=[None, 784])\n",
    "y_data = tf.placeholder(tf.float32, shape=[None, 10])\n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "\n",
    "logits, class_prob = mnist_model.dropout_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "\n",
    "loss = tf.losses.softmax_cross_entropy(onehot_labels=y_data, logits=logits)\n",
    "correct_prediction = tf.equal(tf.argmax(class_prob, 1), tf.argmax(y_data, 1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
    "\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate)\n",
    "train_step = optimizer.minimize(loss)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    batch = mnist.train.next_batch(50)\n",
    "\n",
    "    sess.run(train_step, feed_dict={x_data: batch[0], y_data: batch[1], dropout_rate_data: 0.5})\n",
    "\n",
    "    if epoch % display_step == 0:\n",
    "        print(\"Epoch {}\".format(epoch))\n",
    "        # cur_loss = sess.run(loss, feed_dict={x_data: batch[0],\n",
    "        #                                      y_data: batch[1]})\n",
    "        train_accuracy = sess.run(accuracy, feed_dict={\n",
    "            x_data: batch[0], y_data: batch[1], dropout_rate_data:0}) # no dropout on single accuracy\n",
    "        print(\"Accuracy: {}\".format(train_accuracy))\n",
    "        \n",
    "        # tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)\n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:8]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "save_path = saver.save(sess, \"mnist_dropout.ckpt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training Bootstrap model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ../data/MNIST-data/train-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/train-labels-idx1-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-images-idx3-ubyte.gz\n",
      "Extracting ../data/MNIST-data/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "n_heads = 5\n",
    "dropout_rate=0.3\n",
    "learning_rate=1e-4\n",
    "epochs=20000\n",
    "display_step=50\n",
    "\n",
    "mnist = input_data.read_data_sets(\"../data/MNIST-data\", one_hot=True)\n",
    "\n",
    "x_data = tf.placeholder(tf.float32, shape=[None, 784])\n",
    "y_data = tf.placeholder(tf.float32, shape=[None, 10])\n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "\n",
    "heads = mnist_model.dropout_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_per_head = []\n",
    "train_per_head = []\n",
    "accuracy_per_head = []\n",
    "for head in heads:\n",
    "    logits, class_prob = head  # unpack\n",
    "    loss = tf.losses.softmax_cross_entropy(onehot_labels=y_data, logits=logits)\n",
    "    loss_per_head.append(loss)\n",
    "    train_per_head.append(optimizer.minimize(loss))\n",
    "    \n",
    "    correct_prediction = tf.equal(tf.argmax(class_prob, 1), tf.argmax(y_data, 1))\n",
    "    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
    "    accuracy_per_head.append(accuracy)\n",
    "    \n",
    "#loss = tf.losses.softmax_cross_entropy(onehot_labels=y_data, logits=logits)\n",
    "#correct_prediction = tf.equal(tf.argmax(class_prob, 1), tf.argmax(y_data, 1))\n",
    "#accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
    "\n",
    "rv = bernoulli(0.5)\n",
    "mask = rv.rvs(size=(n_heads, 50)) # x is the length\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "# masked is defined only for the most recent batch\n",
    "for epoch in range(epochs):\n",
    "    \n",
    "    batch = mnist.train.next_batch(50)\n",
    "    x = batch[0]\n",
    "    y = batch[1]\n",
    "    \n",
    "    for i, train_step in enumerate(train_per_head):\n",
    "        masked_x = x[mask[i] == 1, :]\n",
    "        masked_y = y[mask[i] == 1, :]\n",
    "        sess.run(train_step, feed_dict={x_data: masked_x, y_data: masked_y, dropout_rate_data: 0.5})\n",
    "    \n",
    "    if epoch % display_step == 0:\n",
    "        print(\"Epoch {}\".format(epoch))\n",
    "        for i, a in enumerate(accuracy_per_head):\n",
    "            cur_acc = sess.run(a, feed_dict={x_data: x, y_data: y, dropout_rate_data: 0.5})\n",
    "            print(\"Head {}: Accuracy: {}\".format(i, cur_acc))\n",
    "\n",
    "        #train_accuracy = sess.run(accuracy, feed_dict={\n",
    "        #    x_data: batch[0], y_data: batch[1], dropout_rate_data:0}) # no dropout on single accuracy\n",
    "        #print(\"Accuracy: {}\".format(train_accuracy))\n",
    "        \n",
    "        # tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)\n",
    "    variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:8]\n",
    "    saver = tf.train.Saver(var_list=variable_list)\n",
    "    save_path = saver.save(sess, \"mnist_bootstrap.ckpt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training Combined Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![grafik.png](attachment:grafik.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 0\n",
      "Accuracy: 2.26391482353\n",
      "Epoch 2000\n",
      "Accuracy: 0.18221488595\n",
      "Epoch 4000\n",
      "Accuracy: 0.113076582551\n",
      "Epoch 6000\n",
      "Accuracy: 0.148344576359\n",
      "Epoch 8000\n",
      "Accuracy: 0.0655926764011\n",
      "Epoch 10000\n",
      "Accuracy: 0.0806975513697\n",
      "Epoch 12000\n",
      "Accuracy: 0.0791413784027\n",
      "Epoch 14000\n",
      "Accuracy: 0.0218307301402\n",
      "Epoch 16000\n",
      "Accuracy: 0.0398176498711\n",
      "Epoch 18000\n",
      "Accuracy: 0.0348564088345\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "dropout_rate=0.3\n",
    "learning_rate=1e-4\n",
    "epochs=20000\n",
    "display_step=2000\n",
    "T = 20 # Number of Monte Carlo Integration steps for adding noise to the uncertainty\n",
    "\n",
    "x_data = tf.placeholder(tf.float32, shape=[None, 784])\n",
    "y_data = tf.placeholder(tf.float32, shape=[None, 10])   # only contains correct label, shape[None] \n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "\n",
    "# uncertainty (sigma) is per logit\n",
    "logits, props, uncertainty = mnist_model.combined_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "\n",
    "batch_size = tf.shape(logits)[0]\n",
    "\n",
    "eps = tf.random_normal([batch_size, T, 10])\n",
    "logits_T = tf.tile(tf.reshape(logits, [-1, 1, 10]), [1, T, 1])\n",
    "uncertainty_T = tf.tile(tf.reshape(uncertainty, [-1, 1, 10]), [1, T, 1])\n",
    "\n",
    "\n",
    "# Combined loss from What Uncertainties do we need\n",
    "xi = logits_T + uncertainty_T * eps\n",
    "y = tf.tile(tf.reshape(y_data, [-1, 1, 10]), [1, T, 1])\n",
    "onehot_logit = tf.reduce_sum(xi * y, axis=2)\n",
    "loss = tf.reduce_sum(-tf.log(tf.reduce_mean(tf.exp(onehot_logit - tf.reduce_logsumexp(xi, axis=2)), axis=1)))\n",
    "\n",
    "# Aleatoric Uncertainty loss\n",
    "#loss = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=xi)\n",
    "\n",
    "#l = onehot_logit - tf.reduce_logsumexp(xi, axis=2)\n",
    "\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate)\n",
    "train_step = optimizer.minimize(loss)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    batch = mnist.train.next_batch(50)\n",
    "    sess.run(train_step, feed_dict={x_data: batch[0], y_data: batch[1], dropout_rate_data: 0.5})\n",
    "\n",
    "    if epoch % display_step == 0:\n",
    "        print(\"Epoch {}\".format(epoch))\n",
    "        # cur_loss = sess.run(loss, feed_dict={x_data: batch[0],\n",
    "        #                                      y_data: batch[1]})\n",
    "        train_accuracy = sess.run(loss, feed_dict={\n",
    "            x_data: batch[0], y_data: batch[1], dropout_rate_data:0}) # no dropout on single accuracy\n",
    "        print(\"Accuracy: {}\".format(train_accuracy))\n",
    "        \n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:10]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "save_path = saver.save(sess, \"mnist_combined.ckpt\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "adv_img = imageio.imread(\"adv_img.png\").reshape(784)\n",
    "img = imageio.imread(\"img.png\").reshape(784)\n",
    "ticks = [str(x) for x in range(10)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from mnist_combined.ckpt\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "dropout_rate=0.3\n",
    "\n",
    "x_data = tf.placeholder(tf.float32, 784)\n",
    "dropout_rate_data = tf.placeholder(tf.float32)\n",
    "\n",
    "# uncertainty (sigma) is per logit\n",
    "logits,props, uncertainty = mnist_model.combined_cnn_mnist_model(x_data, dropout_rate_data)\n",
    "\n",
    "init = tf.global_variables_initializer()\n",
    "sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))\n",
    "sess.run(init)\n",
    "\n",
    "variable_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=\"mnist\")[:10]\n",
    "saver = tf.train.Saver(var_list=variable_list)\n",
    "saver.restore(sess, \"mnist_combined.ckpt\")\n",
    "\n",
    "def combined_inference(img):\n",
    "    uncertainties = []\n",
    "    ys = []\n",
    "    for i in range(50):\n",
    "        ys.append(sess.run(props, feed_dict={x_data: img, dropout_rate_data: 0.5})[0])\n",
    "        uncertainties.append(sess.run(tf.square(uncertainty), feed_dict={x_data: img,\n",
    "                                                                         dropout_rate_data: 0.5})[0])\n",
    "    fig, axs = plt.subplots(2, 3, figsize=[15, 5])\n",
    "    fig.suptitle(\"Adversarial Attack in Combined Network - {}\".format(np.mean(entropies)), fontsize=16)\n",
    "    axs[0, 0].bar(ticks, np.array(ys).var(axis=0))\n",
    "    axs[0, 0].set_title(\"Var\")\n",
    "    axs[0, 1].bar(ticks, np.array(ys).mean(axis=0))\n",
    "    axs[0, 1].set_title(\"Mean\")\n",
    "    axs[0, 2].imshow(img.reshape(28, 28), cmap=\"gray\")\n",
    "    \n",
    "#    fig, axs = plt.subplots(1, 3, figsize=[15, 5])\n",
    "    axs[1, 0].bar(ticks, np.array(uncertainties).var(axis=0))\n",
    "    axs[1, 0].set_title(\"Uncertainty Variance\")\n",
    "    axs[1, 1].bar(ticks, np.array(uncertainties).mean(axis=0))\n",
    "    axs[1, 1].set_title(\"Uncertainty Mean\")\n",
    "    axs[1, 2].imshow(img.reshape(28, 28), cmap=\"gray\")\n",
    "    fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
    "    \n",
    "#combined_inference(np.random.uniform(size=(784)))\n",
    "#combined_inference(adv_img)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation and display wrongly classified"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Correct: 9\n",
      "Predicted: 4\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f4318e610>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Correct: 7\n",
      "Predicted: 9\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f3459bc90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Correct: 9\n",
      "Predicted: 5\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nunEJBnovcwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f3470bed0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Correct: 0\n",
      "Predicted: 6\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nhilJkqQO/h+mkgHmQc0AtgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f3e77bd90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Correct: 6\n",
      "Predicted: 0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8f346b3790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_test = mnist.test.images\n",
    "y_test = mnist.test.labels\n",
    "\n",
    "\n",
    "results = []\n",
    "for i in xrange(10):\n",
    "    x_batch, y_batch = mnist.test.next_batch(100)\n",
    "    # Use tile instead of repeat, because np.repeat flattens results\n",
    "    x_batch_multipass = np.tile(x_batch, n_passes).reshape(-1, 784)\n",
    "\n",
    "\n",
    "    pred_y_multipass = sess.run(class_prob, feed_dict={\n",
    "        x_data: x_batch_multipass, dropout_rate_data: 0.5})\n",
    "\n",
    "    pred_y_multipass = pred_y_multipass.reshape(-1, n_passes, 10)\n",
    "    pred_y_mean = pred_y_multipass.mean(axis=1)\n",
    "    pred_y_var = pred_y_multipass.var(axis=1)\n",
    "\n",
    "    acc = sess.run(accuracy, feed_dict={\n",
    "        x_data: x_batch, y_data:y_batch, dropout_rate_data: 0.5})\n",
    "    \n",
    "    wrong_idx = np.where(np.equal(np.argmax(y_batch, axis=1), np.argmax(pred_y_mean, axis=1)) == False)[0]\n",
    "    if len(wrong_idx) > 0:\n",
    "        for idx in np.nditer(wrong_idx):\n",
    "            print(\"Correct: \" + str(np.argmax(y_batch[idx])))\n",
    "            print(\"Predicted: \" + str(np.argmax(pred_y_mean[idx])))\n",
    "            show_with_var(x_batch[idx], pred_y_mean[idx], pred_y_var[idx])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ros_e2e",
   "language": "python",
   "name": "ros_e2e"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
